package _1ChapterOne._1ExtractMethod;

import java.util.List;

public class Test2 {
    String name = "client";

    public void printOwing(List<Double> bill) {
        printBanner();
        printBill(getOutStanding(bill));
    }

    // 打印广告语，这种属于没有局部变量，直接将代码移动进来即可
    public void printBanner() {
        System.out.println("--------------------------");
        System.out.println("-*********XX支付*********-");
        System.out.println("--------------------------");
    }

    // 打印账单，这是要使用局部变量的，使用参数传递就行
    // 只在调用函数前使用也是这样
    public void printBill(double outstanding) {
        System.out.println("hello Mr/Ms " + name);
        System.out.println("you need to pay $" + outstanding);
    }

    // 计算价格
    public double getOutStanding(List<Double> bill) {
        return discount(bill.stream().mapToDouble(Double::doubleValue).sum());
    }

    // 要在调用后使用，就要将值传回去，虽然引用数据类型没有这个烦恼，最好还是返回
    // 一个值，因为尽量不要改变原来的对象，说不定在哪被用之后就会产生错误
    public double discount(double outstanding) {
        return outstanding * 0.8;
    }
}
